--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Commit 1bbfacee9435cb8f2eda0317c49a12d02b2b2e16
Parents : 0135de3
Author : Mark Qvist <mark@unsigned.io>
Date : 2024-09-11T00:20:35+02:00
Add stamp configuration options
Changes
3 files changed, 67 insertions(+), 9 deletions(-)
Diff
diff --git a/nomadnet/Conversation.py b/nomadnet/Conversation.py
index 8e2e523..057e040 100644
--- a/nomadnet/Conversation.py
+++ b/nomadnet/Conversation.py
@@ -217,7 +217,11 @@ class Conversation:
if self.app.message_router.get_outbound_propagation_node() != None:
desired_method = LXMF.LXMessage.PROPAGATED
- lxm = LXMF.LXMessage(dest, source, content, title=title, desired_method=desired_method)
+ dest_is_trusted = False
+ if self.app.directory.trust_level(dest.hash) == DirectoryEntry.TRUSTED:
+ dest_is_trusted = True
+
+ lxm = LXMF.LXMessage(dest, source, content, title=title, desired_method=desired_method, include_ticket=dest_is_trusted)
lxm.register_delivery_callback(self.message_notification)
lxm.register_failed_callback(self.message_notification)
diff --git a/nomadnet/NomadNetworkApp.py b/nomadnet/NomadNetworkApp.py
index c14ed82..84fdcd5 100644
--- a/nomadnet/NomadNetworkApp.py
+++ b/nomadnet/NomadNetworkApp.py
@@ -134,6 +134,10 @@ class NomadNetworkApp:
self.lxmf_sync_interval = 360*60
self.lxmf_sync_limit = 8
self.compact_stream = False
+
+ self.required_stamp_cost = None
+ self.accept_invalid_stamps = False
+
if not os.path.isdir(self.storagepath):
os.makedirs(self.storagepath)
@@ -296,8 +300,9 @@ class NomadNetworkApp:
for destination_hash in self.ignored_list:
self.message_router.ignore_destination(destination_hash)
- self.lxmf_destination = self.message_router.register_delivery_identity(self.identity, display_name=self.peer_settings["display_name"])
- self.lxmf_destination.set_default_app_data(self.get_display_name_bytes)
+ self.lxmf_destination = self.message_router.register_delivery_identity(self.identity, display_name=self.peer_settings["display_name"], stamp_cost=self.required_stamp_cost)
+ if not self.accept_invalid_stamps:
+ self.message_router.enforce_stamps()
RNS.Identity.remember(
packet_hash=None,
@@ -492,7 +497,9 @@ class NomadNetworkApp:
self.message_router.cancel_propagation_node_requests()
def announce_now(self):
- self.lxmf_destination.announce()
+ self.message_router.set_inbound_stamp_cost(self.lxmf_destination.hash, self.required_stamp_cost)
+ self.lxmf_destination.display_name = self.peer_settings["display_name"]
+ self.message_router.announce(self.lxmf_destination.hash)
self.peer_settings["last_announce"] = time.time()
self.save_peer_settings()
@@ -738,6 +745,24 @@ class NomadNetworkApp:
else:
self.lxmf_sync_limit = None
+ if option == "required_stamp_cost":
+ value = self.config["node"]["node_name"]
+ if value.lower() == "none":
+ self.required_stamp_cost = None
+ else:
+ value = self.config["client"].as_int(option)
+
+ if value > 0:
+ if value > 255:
+ value = 255
+ self.required_stamp_cost = value
+ else:
+ self.required_stamp_cost = None
+
+ if option == "accept_invalid_stamps":
+ value = self.config["client"].as_bool(option)
+ self.accept_invalid_stamps = value
+
if option == "max_accepted_size":
value = self.config["client"].as_float(option)
@@ -1017,6 +1042,24 @@ lxmf_sync_interval = 360
# the limit, and download everything every time.
lxmf_sync_limit = 8
+# You can specify a required stamp cost for
+# inbound messages to be accepted. Specifying
+# a stamp cost will require untrusted senders
+# that message you to include a cryptographic
+# stamp in their messages. Performing this
+# operation takes the sender an amount of time
+# proportional to the stamp cost. As a rough
+# estimate, a stamp cost of 8 will take less
+# than a second to compute, and a stamp cost
+# of 20 could take several minutes, even on
+# a fast computer.
+required_stamp_cost = None
+
+# You can signal stamp requirements to senders,
+# but still accept messages with invalid stamps
+# by setting this option to True.
+accept_invalid_stamps = False
+
# The maximum accepted unpacked size for mes-
# sages received directly from other peers,
# specified in kilobytes. Messages larger than
diff --git a/nomadnet/ui/textui/Guide.py b/nomadnet/ui/textui/Guide.py
index 7a3b5c8..69305cf 100644
--- a/nomadnet/ui/textui/Guide.py
+++ b/nomadnet/ui/textui/Guide.py
@@ -521,6 +521,18 @@ The number of minutes between each automatic sync. The default is equal to 6 hou
On low-bandwidth networks, it can be useful to limit the amount of messages downloaded in each sync. The default is 8. Set to 0 to download all available messages every time a sync occurs.
<
+>>>
+`!required_stamp_cost = None`!
+>>>>
+You can specify a required stamp cost for inbound messages to be accepted. Specifying a stamp cost will require untrusted senders that message you to include a cryptographic stamp in their messages. Performing this operation takes the sender an amount of time proportional to the stamp cost. As a rough estimate, a stamp cost of 8 will take less than a second to compute, and a stamp cost of 20 could take several minutes, even on a fast computer.
+<
+
+>>>
+`!accept_invalid_stamps = False`!
+>>>>
+You can signal stamp requirements to senders, but still accept messages with invalid stamps by setting this option to True.
+<
+
>>>
`!max_accepted_size = 500`!
>>>>
@@ -739,12 +751,11 @@ If you have Internet access, and just want to get started experimenting, you are
The Testnet also runs the latest version of Reticulum, often even a short while before it is publicly released, which means strange behaviour might occur. If none of that scares you, add the following interface to your Reticulum configuration file to join:
>>
-[[RNS Testnet Zurich]]
+[[RNS Testnet Dublin]]
type = TCPClientInterface
- interface_enabled = yes
- outgoing = True
- target_host = zurich.connect.reticulum.network
- target_port = 4242
+ enabled = yes
+ target_host = dublin.connect.reticulum.network
+ target_port = 4965
<
If you connect to the testnet, you can leave nomadnet running for a while and wait for it to receive announces from other nodes on the network that host pages or services, or you can try connecting directly to some nodes listed here:
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────